﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WareHouse.Contract.Models;

namespace WareHouse.App
{
    using WareHouse.Contract.Services;
    using WareHouse.Service.Services;

    public partial class FrmItemPrice : Form
    {
        private ItemModel model = new ItemModel();
        private ItemPriceModel modelPrice = new ItemPriceModel();
        private IWareHouseService wareHouseService;
        public FrmItemPrice()
        {
            wareHouseService=new WareHouseService();
            InitializeComponent();
        }

        private void FrmItemPrice_Load(object sender, EventArgs e)
        {
            CheckRole();
            this.LoadItem();
        }
        private void CheckRole()
        {
            if (!wareHouseService.R(General.groupUserId, "itemprice_add"))
            {
                btnAdd.Enabled = false;

            }
            if (!wareHouseService.R(General.groupUserId, "itemprice_edit"))
            {
                btnUpdate.Enabled = false;

            }
            if (!wareHouseService.R(General.groupUserId, "itemprice_delete"))
            {
                btnDelete.Enabled = false;

            }

        }
        private void LoadItem()
        {
            gridItem.DataSource = wareHouseService.ListItem();
        }

        private void gridItem_DoubleClick(object sender, EventArgs e)
        {
           
            var row = (ItemModel)gridView1.GetRow(gridView1.GetSelectedRows()[0]);
            if (row !=null)
            {
                txtItemId.Text = row.ItemId.ToString();
                txtItemName.Text = row.ItemName;
                this.LoadItemPriceByItemId(row.ItemId);
            }
        }

        private void LoadItemPriceByItemId(int itemId)
        {
            gridItemPrice.DataSource = wareHouseService.ListItemPriceByItemId(itemId);
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {





            if (btnAdd.Text == "THÊM MỚI")
            {
                General.ChangeButtonStatus("insert", btnAdd, btnUpdate, btnDelete);


                dtpEffectiveFrom.Text = "";
                dtpEffectiveTo.Text = "";
                txtDateCreate.Text = "";
                txtPrice.Text = "";
                txtLastUpdate.Text = "";
                txtUserCreate.Text = "";
                txtUserUpdate.Text = "";
                

                return;
            }
            if (btnAdd.Text == "LƯU")
            {

                if (dtpEffectiveFrom.Text == "")
                {
                    MessageBox.Show("Bạn chưa chọn ngày bắt đầu cho giá này");
                    return;
                }
                if (txtItemId.Text =="")
                {
                    MessageBox.Show("Bạn chưa chọn sản phẩm để nhập giá vui lòng double click để chọn sản phẩm");
                    return;
                }
                if (dtpEffectiveFrom.Text=="")
                {
                    MessageBox.Show("Chọn ngày bắt đầu cho giá của sản phẩm này");
                    return;
                }

                if (txtPrice.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập giá");
                    return;
                }
              
             
                UpdateModel();

               
                modelPrice.UserCreate = General.userName;
                modelPrice.ItemPriceId = 0;

                if (!wareHouseService.IsCheckOverLapItemPrice(modelPrice.ItemPriceId, modelPrice.EffectiveFromDate, modelPrice.EffectiveToDate, modelPrice.ItemId))
                {
                    MessageBox.Show("Giá này đã trùng lập với giá khác vui lòng kiểm tra lại");
                    return;
                }
                var result = this.wareHouseService.SaveOrUpdateItemPrice(this.modelPrice);
                if (result != null)
                {

                    MessageBox.Show("Thêm mới thành công", "Thông báo");

                    General.ChangeButtonStatus("insert", this.btnAdd, this.btnUpdate, this.btnDelete);
                    this.LoadItemPriceByItemId(int.Parse(txtItemId.Text!=""?txtItemId.Text:"0"));
                }
            }
            else
                MessageBox.Show("Thêm mới thất bại vui lòng kiểm tra lại dữ liệu ", "Thông báo");


        }

        private void btnDelete_Click(object sender, EventArgs e)
        {


            if (btnDelete.Text == "HỦY")
            {
                General.ChangeButtonStatus("update", btnAdd, btnUpdate, btnDelete);

            }
            else if (btnDelete.Text == "XÓA")
            {
                if (MessageBox.Show(General.delConfirmInfo, General.delConfirmCaption, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    this.UpdateModel();
                    if (modelPrice.ItemPriceId > 0)
                    {
                        var result = wareHouseService.DeleteItemPrice(modelPrice);
                        if (result)
                        {
                            General.ChangeButtonStatus("delete", btnAdd, btnUpdate, btnDelete);
                            MessageBox.Show("Xóa thành công", "Thông báo");
                            this.LoadItemPriceByItemId(int.Parse(txtItemId.Text != "" ? txtItemId.Text : "0"));
                            return;
                        }
                        MessageBox.Show("Xóa thất bại", "Thông báo");

                    }
                }
            }
            else return;
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {

            if (btnUpdate.Text == "CẬP NHẬT")
            {
                General.ChangeButtonStatus("update", btnAdd, btnUpdate, btnDelete);

                return;

            }
            else
                if (btnUpdate.Text == "HỦY")
                {
                    General.ChangeButtonStatus("insert", btnAdd, btnUpdate, btnDelete);


                }
                else if (btnUpdate.Text == "LƯU")
                {

                    
                   
                    if (dtpEffectiveFrom.Text == "")
                    {
                        MessageBox.Show("Bạn chưa chọn ngày bắt đầu cho giá này");
                        return;
                    }
                    if (txtItemId.Text == "")
                    {
                        MessageBox.Show("Bạn chưa chọnsản phẩm");
                        return;
                    }

                  

                    UpdateModel();
                    if (!wareHouseService.IsCheckOverLapItemPrice(modelPrice.ItemPriceId, modelPrice.EffectiveFromDate, modelPrice.EffectiveToDate,modelPrice.ItemId))
                    {
                        MessageBox.Show("Giá này đã trùng lập với giá khác vui lòng kiểm tra lại");
                        return;
                    }
                    var result = wareHouseService.SaveOrUpdateItemPrice(modelPrice);


                    if (result != null)
                    {
                        MessageBox.Show("Cập nhật thành công", "Thông báo");
                        this.LoadItemPriceByItemId(int.Parse(txtItemId.Text != "" ? txtItemId.Text : "0"));
                        General.ChangeButtonStatus("update", btnAdd, btnUpdate, btnDelete);

                    }
                }
                else
                    MessageBox.Show("Cập nhật thất bại vui lòng kiểm tra lại dữ liệu ", "Thông báo");
        }
        private void UpdateModel()
        {
            modelPrice.ItemId = int.Parse(txtItemId.Text != "" ? txtItemId.Text : "0");
           
            if (chkIsCurrentPrice.Checked)
            {
                modelPrice.IsCurrentPrice = true;
            }
            else
            {
                modelPrice.IsCurrentPrice = false;
            }
            modelPrice.Value = decimal.Parse(txtPrice.Text!="" ? txtPrice.Text:"0");

            modelPrice.EffectiveFromDate = DateTime.Parse(dtpEffectiveFrom.EditValue.ToString());
            if (dtpEffectiveTo.Text !="")
            {
                modelPrice.EffectiveToDate = DateTime.Parse(dtpEffectiveTo.EditValue.ToString());
            }
            else
            {
                modelPrice.EffectiveToDate = null;

            }
            modelPrice.DateCreate = DateTime.Now;
            modelPrice.UpdateBy = General.userName;
            modelPrice.LastUpdate = DateTime.Now;

        }

        private void gridItemPrice_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                modelPrice = (ItemPriceModel)gridItemPrice.SelectedRows[0].DataBoundItem;
                if (modelPrice.IsCurrentPrice)
                {
                    chkIsCurrentPrice.Checked = true;
                }
                else
                {
                    chkIsCurrentPrice.Checked = false;

                }

                txtItemPriceId.Text = modelPrice.ItemPriceId.ToString();
                txtPrice.Text = modelPrice.Value.ToString();
                dtpEffectiveFrom.EditValue = modelPrice.EffectiveFromDate;
                if (modelPrice.EffectiveToDate !=null)
                {
                    dtpEffectiveTo.EditValue = modelPrice.EffectiveToDate;
                }
                else
                {
                    dtpEffectiveTo.EditValue = null;
                }
                if ((DateTime)dtpEffectiveTo.EditValue == null)
                {
                    dtpEffectiveTo.Text = "";
                }
                txtDateCreate.Text = modelPrice.DateCreate != null
                                    ? string.Format(
                                        "{0:dd-MM-yyyy}",
                                        modelPrice.DateCreate)
                                    : "";

                txtLastUpdate.Text = model.LastUpdate != null ? string.Format(
                                             "{0:dd-MM-yyyy}",
                                            model.LastUpdate) :
                "";
                txtUserCreate.Text = this.model.UserCreate ?? "";
                txtUserUpdate.Text = this.model.UpdateBy ?? "";
            }
            catch (Exception)
            {
                
                
            }
        
        }
    }
}
